package es.tikitaka.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

import es.tikitaka.dao.EqMantenimientoService;
import es.tikitaka.dictionary.AniosDic;
import es.tikitaka.domain.usuarios.EqMantenimiento;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

@Name("eqMantenimientoService")
public class EqMantenimientoServiceImpl implements EqMantenimientoService {

	@In
	EntityManager em;

	/**
	 * Constructor por defecto
	 */
	public EqMantenimientoServiceImpl() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * 
	 * @return lista de todos los equipos de mantenimiento en el sistema
	 */
	@SuppressWarnings("unchecked")
	public List<EqMantenimiento> getList() {
		List<EqMantenimiento> list = null;
		try {
			list = em.createQuery("select e from EqMantenimiento e")
					.getResultList();
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

	/**
	 * Método para obtener el equipo de mantenimiento para un año dado
	 * 
	 * @param anio
	 *            Año para el que se busca el equipo de mantenimiento
	 * @return equipo de mantenimiento para el año dado
	 */
	public EqMantenimiento equipoForAnio(AniosDic anio) {
		EqMantenimiento equ = null;
		try {
			equ = (EqMantenimiento) em
					.createQuery(
							"select e from EqMantenimiento e left join fetch e.anio a where a.id = ?1")
					.setParameter("1", anio.getId()).getSingleResult();
		} catch (NoResultException e) {
			e.printStackTrace();
		}
		return equ;
	}

	/**
	 * 
	 * @param id
	 *            Id del equipo de mantenimiento
	 * @return true o false si se borro correctamente o no
	 */
	public boolean delete(Integer id) {
		boolean correcto;
		try {
			EqMantenimiento equ = em.getReference(EqMantenimiento.class, id);
			em.remove(equ);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}

	/**
	 * 
	 * @param equipo
	 *            Equipo de mantenimiento a guardar
	 * @return true o false si se guardo correctamente o no
	 */
	public boolean save(EqMantenimiento equipo) {
		boolean correcto;
		try {
			em.persist(equipo);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}
}
